﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using produccion.clases;
using System.Data;
using System.IO;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para frmConOrdComMat.xaml
    /// </summary>
    public partial class frmConOrdComMat : Window
    {

        public frmConOrdComMat()
        {
            InitializeComponent();
        }
       

        private void dgPedidos_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            conOrdComMat.Instance.cargarDetalle();
        }

        private void btnSalir_Click(object sender, RoutedEventArgs e)
        {
            LimpiarForm();
            this.Close();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            Keyboard.Focus(txtCodMat);
            LimpiarForm();
        }

        private void LimpiarForm()
        {
            try
            {
                txtCodMat.Text = "";
                txtNomMat.Text = "";
                txtUniCom.Text = "";
                txtUniUso.Text = "";
                conOrdComMat.Instance.lisMateriales.Clear();
                conOrdComMat.Instance.lisDetalle.Clear();
                conOrdComMat.Instance.lisentradas.Clear();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void dgDetalle_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            conOrdComMat.Instance.mostrarRecibido();
        }

        private void dgPedidos_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }
    }

    public class conOrdComMat : ObservableObject
    {
        #region singleton
        private static conOrdComMat instance = null;

        CLSENCUNI encUni = new CLSENCUNI();
        CLSENCPPRP encPprp = new CLSENCPPRP();
        CLSDETPPRP detPprp = new CLSDETPPRP();

        protected conOrdComMat()
        {
            MDOgeneral.conectar();
            strTituloVentana = "Consulta de ordenes de compra por material " + MDOgeneral.usuario + " - [frmConOrdConMat]";
            lisMateriales.Clear();
            lisDetalle.Clear();
            lisentradas.Clear();
        }

        public static conOrdComMat Instance
        {
            get
            {
                if (instance == null)
                    instance = new conOrdComMat();
                return instance;
            }
            set
            {
                if (instance != null)
                    instance = null;
            }
        }
        #endregion

        #region propiedades
       
        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private string _strMaterial;
        public string strMaterial
        {
            get { return _strMaterial; }
            set 
            { 
                _strMaterial = value;
                if (_strMaterial.Length == 6)
                {
                    lisMateriales.Clear();
                    cargarColores();
                    CLSMAEMAT maeMat = new CLSMAEMAT();
                    maeMat.CODMAT_MAT = _strMaterial;
                    maeMat.Consultar();
                    strNombreMaterial = maeMat.NOMMAT_MAT;
                    if (!String.IsNullOrEmpty(strNombreMaterial))
                    {
                        
                        encUni.CODUNI_EUN = maeMat.UNICOM_MAT;
                        encUni.Consultar();
                        strUnidadCompra = encUni.NOMUNI_EUN;
                        encUni.CODUNI_EUN = maeMat.UNIUSU_MAT;
                        encUni.Consultar();
                        strUnidadUso = encUni.NOMUNI_EUN;
                        
                        detPprp.CODMAT_DPP = _strMaterial;
                        lisMateriales = detPprp.ConsultaOrdenCompraMaterial();
                        lisDetalle.Clear();
                    }
                    else
                        strNombreMaterial = "Material no existe";
                }
                else
                {
                    strNombreMaterial = "";
                    strUnidadCompra = "";
                    strUnidadUso = "strUnidadCompra";
                }

                RaisePropertyChangedEvent("strMaterial");
                //RaisePropertyChangedEvent("strUnidadCompra");
                //RaisePropertyChangedEvent("strUnidadUso");
            }
        }

        private string _strCodigoProveedor;
        public string strCodigoProveedor
        {
            get { return _strCodigoProveedor; }
            set { _strCodigoProveedor = value; RaisePropertyChangedEvent("strCodigoProveedor"); }
        }
        private int _IntNumeroPedido;
        public int IntNumeroPedido
        {
            get { return _IntNumeroPedido; }
            set { _IntNumeroPedido = value; RaisePropertyChangedEvent("IntNumeroPedido"); }
        }


        private string _strNombreMaterial;
        public string strNombreMaterial
        {
            get { return _strNombreMaterial; }
            set { _strNombreMaterial = value; RaisePropertyChangedEvent("strNombreMaterial"); }
        }

        private string _strUnidadCompra;
        public string strUnidadCompra
        {
            get { return _strUnidadCompra; }
            set { _strUnidadCompra = value; RaisePropertyChangedEvent("strUnidadCompra"); }
        }

        private string _strUnidadUso;
        public string strUnidadUso
        {
            get { return _strUnidadUso; }
            set { _strUnidadUso = value; RaisePropertyChangedEvent("strUnidadUso"); }
        }

        private DataTable _lisMateriales = new DataTable();
        public DataTable lisMateriales
        {
            get { return _lisMateriales; }
            set { _lisMateriales = value; RaisePropertyChangedEvent("lisMateriales"); }
        }

        private int _selMaterial;
        public int selMaterial
        {
            get { return _selMaterial; }
            set { _selMaterial = value; RaisePropertyChangedEvent("selMaterial"); }
        }

        private DataTable _lisDetalle = new DataTable();
        public DataTable lisDetalle
        {
            get { return _lisDetalle; }
            set { _lisDetalle = value; RaisePropertyChangedEvent("lisDetalle"); }
        }

        private int _selDetalle;
        public int selDetalle
        {
            get { return _selDetalle; }
            set { _selDetalle = value; RaisePropertyChangedEvent("selDetalle"); }
        }

        private DataTable _lisentradas = new DataTable("TMPDETPPCP");
        public DataTable lisentradas
        {
            get { return _lisentradas; }
            set { _lisentradas = value; RaisePropertyChangedEvent("lisentradas"); }
        }

        private List<CLSMAECOLP> _liscolores = new List<CLSMAECOLP>();
        public List<CLSMAECOLP> liscolores
        {
            get { return _liscolores; }
            set { _liscolores = value; RaisePropertyChangedEvent("liscolores"); }
        }

        private CLSMAECOLP _selliscolores;
        public CLSMAECOLP selliscolores
        {
            get { return _selliscolores; }
            set 
            { 
                _selliscolores = value;

                if (_selliscolores != null)
                {
                    CLSMAEMAT maeMat = new CLSMAEMAT();
                    maeMat.CODMAT_MAT = _strMaterial;
                    maeMat.Consultar();
                    strNombreMaterial = maeMat.NOMMAT_MAT;
                    if (!String.IsNullOrEmpty(strNombreMaterial))
                    {
                        detPprp.CODMAT_DPP = strMaterial;
                        if (_selliscolores.CODCOL_COL != "ZZZZ")
                        {
                            detPprp.CODCOL_DPP = selliscolores.CODCOL_COL;
                            lisMateriales = detPprp.ConsultaOrdenCompraMaterialColor();
                            lisDetalle.Clear();
                        }
                        else
                        {
                            lisMateriales = detPprp.ConsultaOrdenCompraMaterial();
                            lisDetalle.Clear();
                        }
                    }
                    else
                        strNombreMaterial = "Material no existe";
                }
                RaisePropertyChangedEvent("selliscolores");
                RaisePropertyChangedEvent("lisMateriales");
                RaisePropertyChangedEvent("lisDetalle");
            }
        }

        RelayCommand _cmdBuscarMaterial;
        public ICommand cmdBuscarMaterial
        {
            get
            {
                if (_cmdBuscarMaterial == null)
                {
                    _cmdBuscarMaterial = new RelayCommand(r => BuscarMaterial());
                }
                return _cmdBuscarMaterial;
            }
        }

        RelayCommand _cmdImprimir;
        public ICommand cmdImprimir
        {
            get
            {
                if (_cmdImprimir == null)
                {
                    _cmdImprimir = new RelayCommand(r => imprimir());
                }
                return _cmdImprimir;
            }
        }

        public void BuscarMaterial()
        {
            FRMBuscarCol frm = new FRMBuscarCol();
            frm.RequiereColor = false;
            frm.EsReferencia = false;
            frm.ShowDialog();
            if (!String.IsNullOrEmpty(frm.Retorno))
            {
                strMaterial = frm.Retorno.Substring(0, 6);
                RaisePropertyChangedEvent("strMaterial");
            }
        }

        public void cargarColores()
        {
            try
            {
                CLSMAECOLP col = new CLSMAECOLP();
                liscolores = col.lisColorMaterial(strMaterial);
                RaisePropertyChangedEvent("liscolores");
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void cargarDetalle()
        {
            try
            {
                if (selMaterial >= 0)
                {
                    string nroPed = lisMateriales.Rows[selMaterial]["NRO_PEDIDO"].ToString();
                    detPprp.NROPED_DPP = System.Convert.ToInt64(nroPed);
                    detPprp.CODPRV_DPP = lisMateriales.Rows[selMaterial]["CODIGO"].ToString();

                    lisDetalle = detPprp.ConsultaOrdenCompra();
                    RaisePropertyChangedEvent("lisDetalle");
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void mostrarRecibido()
        {
            try
            {
                if (selDetalle >= 0)
                {
                    
                    clases.CLSAUDENTP audi = new clases.CLSAUDENTP();
                    audi.CODMAT_AEN = lisDetalle.Rows[selDetalle]["CODIGO"].ToString().Substring(0,6);
                    audi.CODCOL_AEN = lisDetalle.Rows[selDetalle]["CODIGO"].ToString().Substring(6,4);

                    lisentradas = audi.conEntradas(detPprp.CODPRV_DPP, detPprp.NROPED_DPP.ToString());
                    FRMInfoEntradas frm = new FRMInfoEntradas();
                    frm.ShowDialog();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void imprimir()
        {
            try
            {
                if (!String.IsNullOrEmpty(strMaterial))
                {
                    detPprp.CODMAT_DPP = strMaterial;
                    DataSet ds = new DataSet("DsPedPrv");
                    DataTable d1 = new DataTable("dtEncPprp");
                    DataTable d2 = new DataTable("dtDetPprp");
                    d1 = encPprp.ImprimirConsultaOrdenCompraMaterial(strMaterial);
                    d1.TableName = "dtEncPprp";
                    d2 = detPprp.ImprimirConsultaOrdenCompraMaterial();
                    d2.TableName = "dtDetPprp";
                    ds.Tables.Add(d1);
                    ds.Tables.Add(d2);
                    produccion.reportes.Vista frm = new produccion.reportes.Vista();
                    frm.reporte = @"reportes\rptConOrdComMat.rpt";
                    frm.ds = ds;
                    frm.Show();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }


        #endregion
    }
}
